﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bastanteo.Dominio;
using System.Data.SqlClient;

namespace Bastanteo.Persistencia.ADO
{
    public class TipoEmpresaDAO : ITipoEmpresaDAO
    {
        public TipoEmpresa Crear(TipoEmpresa tipoACrear)
        {
            int nuevoCodigo = ObtenerNuevoCodigo();
            string sentencia = "INSERT INTO t_tipo_empresa VALUES (@codigo, @abreviacion)";
            using (SqlConnection conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codigo", nuevoCodigo));
                    comando.Parameters.Add(new SqlParameter("@abreviacion", tipoACrear.Abreviacion));
                    comando.ExecuteNonQuery();
                }
            }
            return Obtener(nuevoCodigo);
        }
        public TipoEmpresa Obtener(int codigo)
        {
            TipoEmpresa tipoExistente = null;
            string sentencia = "SELECT * FROM t_tipo_empresa WHERE codigo=@codigo";
            using (SqlConnection conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codigo", codigo));
                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        tipoExistente = new TipoEmpresa();
                        tipoExistente.Codigo = (int)resultado["codigo"];
                        tipoExistente.Abreviacion = (string)resultado["abreviacion"];
                    }
                }
            }
            return tipoExistente;
        }
        public TipoEmpresa Modificar(TipoEmpresa tipoAModificar)
        {
            string sentencia = "UPDATE t_tipo_empresa SET abreviacion=@abreviacion WHERE codigo=@codigo";
            using (SqlConnection conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codigo", tipoAModificar.Codigo));
                    comando.Parameters.Add(new SqlParameter("@abreviacion", tipoAModificar.Abreviacion));
                    comando.ExecuteNonQuery();
                }
            }
            return Obtener(tipoAModificar.Codigo);
        }
        public void Eliminar(TipoEmpresa tipoAEliminar)
        {
            string sentencia = "DELETE FROM t_tipo_empresa WHERE codigo=@codigo";
            using (SqlConnection conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@codigo", tipoAEliminar.Codigo));
                    comando.ExecuteNonQuery();
                }
            }
        }
        public ICollection<TipoEmpresa> ListarTodos()
        {
            ICollection<TipoEmpresa> tiposExistentes = new List<TipoEmpresa>();
            TipoEmpresa tipoExistente = null;
            string sentencia = "SELECT * FROM t_tipo_empresa";
            using (SqlConnection conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    while (resultado.Read())
                    {
                        tipoExistente = new TipoEmpresa();
                        tipoExistente.Codigo = (int)resultado["codigo"];
                        tipoExistente.Abreviacion = (string)resultado["abreviacion"];
                        tiposExistentes.Add(tipoExistente);
                    }
                }
            }
            return tiposExistentes;
        }

        private int ObtenerNuevoCodigo()
        {
            int nuevoCodigo = 0;
            string sentencia = "SELECT max(codigo) FROM t_tipo_empresa";
            using (SqlConnection conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    object valor = comando.ExecuteScalar();
                    if (DBNull.Value.Equals(valor))
                        nuevoCodigo = 1;
                    else
                        nuevoCodigo = (int)valor + 1;
                }
            }
            return nuevoCodigo;
        }
    }
}